﻿#include <iostream>
#include <vector>
#include "DumpHelper.h" // 包含你的静态库头文件

// 函数：故意执行无效操作以触发崩溃
void CauseCrash() {
	std::cout << "Intentionally causing a crash by writing to a null pointer..." << std::endl;
	int* volatile pBadPtr = nullptr; // 使用 volatile 防止编译器优化掉
	*pBadPtr = 123; // 解引用空指针，将导致访问冲突 (Access Violation)
	// 程序执行不到这里
	std::cout << "This message should not be printed." << std::endl;
}

int main() {
	std::cout << "Starting the application." << std::endl;

	AC::DumpHelper::SetDumpMode(AC::DumpHelper::DumpMode::Minimal);
	AC::DumpHelper::SetDumpMaxFileCount(2);
	// --- 使用 DumpHelper 静态库 ---
	// 1. 初始化 DumpHelper (调用 Start 会自动设置目录为 "dmp" 并启用崩溃转储)
	AC::DumpHelper::Start();

	
	std::cout << "AC::DumpHelper::Start() called. Crash dumps will be saved to the 'dmp' subdirectory." << std::endl;

	// 可选：如果你想自定义设置 (如果调用了 Start，下面两行会覆盖 Start 里的默认设置)
	// AC::DumpHelper::SetDumpDirectory("MyCrashDumps"); // 设置自定义目录
	// AC::DumpHelper::SetDumpMaxFileCount(5);          // 设置最大文件数
	// AC::DumpHelper::SetIsDumpCrash(true);            // 确保开启崩溃转储 (如果没调用 Start)

	std::cout << "Application running normally for a bit..." << std::endl;
	// 模拟一些正常工作
	for (int i = 0; i < 3; ++i) {
		std::cout << "Working... " << i + 1 << std::endl;
		// 可以加个短暂延时，方便观察
		// Sleep(500); // #include <Windows.h> for Sleep
	}
	AC::DumpHelper::Snapshot("./test/dmp.dmp", AC::DumpHelper::DumpMode::Full);
	// 2. 调用导致崩溃的函数
	CauseCrash();

	// --- 程序崩溃后，以下代码不会执行 ---
	std::cout << "Application finished (should not reach here after crash)." << std::endl;
	return 0;
}